#include<iostream>
#include<unistd.h>
#include<cstdio>
#include<sys/types.h>
#include<sys/wait.h>
#include <sys/stat.h>
#include <fcntl.h>

using std::cout;
using std::endl;

void Write(int wfd)
{
    int cnt=5;
    while(cnt)
    {
        char buffer[128];
        snprintf(buffer,sizeof(buffer),"%d i am child:%d",getpid(),cnt--);
        //cout<<buffer<<endl;
        write(wfd,buffer,sizeof(buffer));
        sleep(1);
    }
}

void Read(int rfd)
{
    while(true)
    {
        sleep(1);
        char buffer[128];
        int n=read(rfd,buffer,sizeof(buffer));
        if(n<0){
            perror("read fail...");
            return;
        }
        else if(n==0){
            cout<<"child exit,me too!"<<endl;
            break;
        }
        else 
        {
            cout<<"parent get a news:"<<buffer<<endl;
        }
    }
}

void Wait(int id)
{
    int status;
    waitpid(id,&status,0);
    cout<<"child process exit,exception code is:"<<(status&0x7F)<<"exit code:"<<((status>>8)&0xFF)<<endl;
}

// int main()
// {
//     int pipefd[2];

//     int ret=pipe(pipefd);
//     if(ret==-1){
//         perror("pipe fail...");
//         return 1;
//     }
//     //创建父子进程
//     int id=fork();
//     if(id<0){
//         perror("fork fail...");
//         return 2;
//     }
//     else if(id==0){
//         //子进程执行"写"操作
//         close(pipefd[0]);
//         Write(pipefd[1]);
//         close(pipefd[1]);
//         exit(0);
//     }
//     //父进程执行“读”操作
//     close(pipefd[1]);
//     Read(pipefd[0]);
//     close(pipefd[0]);
//     //进程等待——资源清理
//     Wait(id);
//     return 0;
// }

int main()
{
    //创建父子进程
    int id=fork();
    if(id==0){
        //子进程执行"写"操作
        int fd=open("log1.txt",O_WRONLY | O_CREAT,0666);
        cout<<"child fd:"<<fd<<endl;//3
        exit(0);
    }
    int fd=open("log2.txt",O_WRONLY | O_CREAT,0666);
    cout<<"parent fd:"<<fd<<endl;//3

    //子进程的fd与父进程的fd相同，说明父进程与子进程用的不是同一个文件描述符表!!!

    //进程等待——资源清理
    // Wait(id);
    return 0;
}